package top.wardyan.wtask.feishu.vo;

import java.sql.Timestamp;
import java.util.regex.Pattern;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ReUtil;
import top.wardyan.wtask.tapd.vo.TapdMsgLine;

public class FeishuTaskItem {

	private static final cn.hutool.log.Log log = cn.hutool.log.Log.get();

	
	String cust;
	Integer tapdid;
	String name;
	Float hour;
	Boolean isFinished;
	private static final Pattern PATTERN_TAPDID = Pattern.compile("【id(\\d*)】", Pattern.DOTALL);
	private static final Pattern PATTERN_HOUR = Pattern.compile("([\\d\\.]+)h", Pattern.DOTALL);
	
	

	/**
	 * 
	 * 有几种格式:
	 * 客户:
	 * 第一种, 客户在前, 用 - 隔开
	 * 第二种, 在后面, 用括号括起来
	 * 第三种, 没有客户
	 * @param line
	 * @return
	 */
	public static FeishuTaskItem parse(String line) {
		FeishuTaskItem rs = new FeishuTaskItem();
		/**
		分几步:
		1.找TAPD ID
		2.客户			
		3.名称		
		4.工时			// 要求必须是3h这样的
		5.是否未完成		// 要求这3个字必须在末尾
		**/
		
		// 1
		rs.setTapdid(parseTapdID(line));
		
		// 2	// 有2种可能: 在最前面, 或者是在括号里
		rs.setCust(parseCust(line));
		
		rs.setName(parseName(line));
		
		rs.setHour(parseHour(line));
		
		rs.setIsFinished(parseBool(line));
		return rs;
	}
	
	public static String parseName(String line) {
		String rs = "";
		rs = line;
		// 根据ID去导入的任务里找
		// 如果没找到, 就得启动一次导入, 再...
		// 算了, 这里只记录任务ID
		return rs;
	}
	
	public static Boolean parseBool(String line) {
		Boolean rs = true;
		if(line.endsWith("未完成") || line.endsWith("进行中")) {
			rs = false;
		}
		return rs;
	}
	
	/**
	 * 解析工时. 要求必须格式: 1.5h
	 * @param line
	 * @return
	 */
	public static Float parseHour(String line) {
		Float rs = 0.0F;
		String[] lines = line.split(" ");
		if(lines != null && lines.length > 0) {
			String s = ReUtil.get(PATTERN_HOUR, line, 1);
			if(s != null) {
				rs = NumberUtil.parseFloat(s);
			}
			
//			Integer idx = lines.length - 1;
//			while(idx > 0) {
//				// String t = lines[idx];
//
//				String s = ReUtil.get(PATTERN_HOUR, line, 1);
//				if(s != null) {
//					rs = NumberUtil.parseFloat(s);
//				}
//				idx -= 1;
//			}
			// 如果仍然无法解析, 就看看最后一个能不能解析为数字
			if(rs == null || rs <= 0.0) {
				s = lines[lines.length - 1];
				if(s != null) {
					try {
						rs = NumberUtil.parseFloat(s);
					}catch(Exception e) {
						rs = 0.0F;
					}
				}
			}
		}
		
		// 如果按正则
		return rs;
	}
	
	/**
	 * 有2种可能: 在最前面, 或者是在括号里	// 要求统一: 客户在最前面
	 * @param line
	 * @return
	 */
	public static String parseCust(String line) {
		String rs = "";
		if(line.contains("【")) {
			rs = line.substring(0, line.indexOf("【"));
		}else if(line.contains("-")) {
			rs = line.substring(0, line.indexOf("-") - 1);
		}
		rs = rs.trim();
		if(rs.endsWith("-")) {
			rs = rs.substring(0, rs.length() - 1);
		}
		rs = rs.trim();
//		if(line.contains(" - ")) {
//			// 第一套方案: 客户在最前面
//			String[] lines = line.split(" - ");
//			if(lines != null && lines.length > 0) {
//				rs = lines[0];
//			}
//		}
		
		return rs;
	}
	
	
	
	public static Integer parseTapdID(String line) {
		Integer rs = 0;
		// String s = cn.hutool.core.util.ReUtil.get("【ID(\\d*)?】", line, 0);
		// Integer s = ReUtil.getFirstNumber("ID");
		String s = ReUtil.get(PATTERN_TAPDID, line, 1);
		if(s != null) {
			rs = NumberUtil.parseInt(s);
		}
		return rs;
	}
	
	
	
	
	public String getCust() {
		return cust;
	}
	public FeishuTaskItem setCust(String cust) {
		this.cust = cust;
		return this;
	}
	public Integer getTapdid() {
		return tapdid;
	}
	public FeishuTaskItem setTapdid(Integer tapdid) {
		this.tapdid = tapdid;
		return this;
	}
	public String getName() {
		return name;
	}
	public FeishuTaskItem setName(String name) {
		this.name = name;
		return this;
	}
	public Float getHour() {
		return hour;
	}
	public FeishuTaskItem setHour(Float hour) {
		this.hour = hour;
		return this;
	}
	public Boolean getIsFinished() {
		return isFinished;
	}
	public FeishuTaskItem setIsFinished(Boolean isFinished) {
		this.isFinished = isFinished;
		return this;
	}
	
	
	
}
